#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
#1.导入服务接口
from bot_interface.srv import Identify

"""
server client realize steps:
1.导入服务接口
2.创建请求结果接收回调函数
3.声明并创建客户端
4.编写结果接收逻辑
5.调用客户端发送请求
"""
class BaiPiaoNode(Node):
    """
    创建一个李三节点，并在初始化时输出一个话
    """
    def __init__(self,name):
        super().__init__(name)
        self.get_logger().info("大家好，我是李三，李四他哥，我可以白嫖lisi的小说！")
        self.sub_ = self.create_subscription(String,"Topic_test",self.recv_callback,10)

        # 声明并创建客户端
        self.client_=self.create_client(Identify,"bot_server_interface")

    def recv_callback(self,novel):
        self.get_logger().info('李三：我已经收到了：%s' % novel.data)

    def want_to_do_something(self,money=10):
        """
        该函数被主函数调用，用于发送客户端请求
        """
        self.get_logger().info("want_to_do_something,need %d RMB"%money)

        #每隔一秒，查看服务是否在线,若在线则跳出循环
        while not self.client_.wait_for_service(1.0):
            # 若不在线
            self.get_logger().warn("service sign out...")

        # 发送请求
        # 1. 构造请求
        request=Identify.Request()
        request.name=self.get_name()
        request.nums=money

        # 发送异步请求
        # 当请求完成后，调用 self.diy_response_callback
        self.client_.call_async(request).add_done_callback(self.diy_response_callback)


    
    # 创建请求结果接收回调函数
    # self 表示这是一个成员函数
    def diy_response_callback(self,response):
        """
        调用服务回调
        """

        # 编写结果接收逻辑
        result=response.result()
        if result.seuccess:
            self.get_logger().info("Oh...get %d to do to something"%result.nums)
        else:
            self.get_logger().info("no gain....233")
def main(args=None):
    """
    ros2运行该节点的入口函数，可配置函数名称
    """
    rclpy.init(args=args) # 初始化rclpy
    node = BaiPiaoNode("li3")  # 新建一个节点
    node.want_to_do_something();
    rclpy.spin(node) # 保持节点运行，检测是否收到退出指令（Ctrl+C）
    rclpy.shutdown() # rcl关闭